﻿using System;
// 自己写了个继承，分别写了隐藏方法跟重写方法，生成三个实例来演示一下。
namespace MySpace
{
    class Dad
    {
        protected string name;

        public Dad(string n)
        {
            name = n;
        }

        public void Say()
        {
            Console.WriteLine("I am {0}.", name);
        }

        public virtual void Growup()
        {
            Console.WriteLine("{0} has grown old.", name);
        }
    }

    class Son : Dad
    {
        public Son(string n) : base(n)
        {
            //name = n;
        }

        public new void Say()
        {
            Console.WriteLine("I am {0} and a son.", name);
        }

        public override void Growup()
        {
            //base.Growup();
            Console.WriteLine("{0} is growing up.", name);
        }
    }

    class Entrance
    {
        public static void Main(string[] args)
        {
            Dad grandpa = new Dad("grandpa");
            grandpa.Say();
            grandpa.Growup();

            Dad father = new Son("father");
            father.Say();
            father.Growup();

            Son tom = new Son("Tom");
            tom.Say();
            tom.Growup();
            Console.ReadKey();
        }
    }
}
/*
 
上边的结果：

 1）用父类生成的父类对象，grandpa，访问隐藏方法是父类的方法，访问重写方法是父类的方法
 2）用子类生成的父类对象，father，访问隐藏方法是父类的方法，访问重写方法是子类的方法
 3）用子类生成的子类对象，son，访问隐藏方法是子类的方法，访问重写方法是子类的方法 

 */